Quake Entities Original text info on entities by Niklata (Nicholas Dwarkanath) - nichd@norfolk.infi.net Additions and HTMLization by Thomas Winzig - thomas.winzig@webcom.com You can get the most up-to-date version of the Quake Entity Specs (http://www.infi.net/~nichd/qentity.html) from Niklata's Technical Resources (http://www.infi.net/~nichd/). This is the text version of the Quake Entities specs. It is not updated as frequently as the HTML version and it certainly does not look as good. You may not distribute the text version of the Quake Entities list without first packaging the HTML version in the same archive as the text version is being distributed in. Reason: This version looks bad and is more difficult to read/navigate than the HTML version. This version is here solely for those without HTML viewers/web browsers. **WARNING - BADLY FORMATTED TEXT ALERT - AUTO-CONVERTED FROM HTML** Here's a good list of entities and their properties. This should help you in making editors/building MAP files. If you find an error, or figure something out that I don't know, please email Niklata. I'll put your contribution and you'll get your name in here as well. When I give you frameworks for a structure, the individual entries can be in any order, and lots are optional. I try to mark if an entry is optional. Lots of stuff here may be optional, I just haven't tested it yet to know. I'll clean up this list later once I do some testing, so don't worry. In a "" block, your choices for that block are delimited by commas. I'll get to describing the "spawnflags" tag in a bit - it controls stuff like difficulty levels, etc. It won't take me long to do... I'll have it finished soon. Table of Contents Section 1: Intro 1.1: What's New 1.2: Contributors Section 2: General entity/.map information 2.1: .map Header (entity #0) 2.2: "spawnflags" tag 2.3: Optional parameters for triggers 2.4: General entity syntax 2.5: General entity list Section 3: Entity 'class' examples 3.1: Lights 3.2: Player movement tags 3.3: Movers (Doors, plats, etc) 3.4: Triggers/Switches 3.5: Traps/Things harmful to you 3.6: Misc./Stuff I have no idea about Section 4: Special Entity-related structures 4.1: Moving platforms Section 1: Intro 1.1 What's new: More organized, table of contents, contributors list, fixed some stuff. The "model" tag is something you don't have to worry about. This is just a reference that QBSP puts into the final BSP file, telling Quake which brush the entity behavior attaches to. Everything that I used to give a "model" tag in here now tells you that it must attach to a brush. This means that it must be put inside the actual brush declaration statement. Ex: { "classname" "trigger_changelevel" "map" "e1m1" // Map to change to on trigger { } } 1.2 Contributors: Thomas Winzig - Confirmation on the "model" tag's behavior. HTMLization of this doc. Clarified several things. Reorganized the document structure a little bit. Brian Hackert - Info on how to use func_train and path_corner. Told me that "targetname" and "target" can have real names for their argument, not just numbers. Section 2: General entity/.map information 2.1 .map Header (entity #0): "sounds" "#" // Tells the CD player which track to play. "classname" "worldspawn" // Tells Quake to spawn the world "wad" "DIRPATH" // tells what graphics (texture) WAD2 file to use. "message" "TITLE" // The title of the level "worldtype" "#" // Describes environment? 0, 1 (Ziggurat Vertigo's), 2 will work 2.2 "spawnflags" tag: I believe that anything with an origin tag can have an optional 'spawnflags' tag. This is not confirmed, however. I'll be working out the bits soon! 1 - Larger Health/Larger Ammo 2 - Megahealth 2.3 Optional parameters for triggers: "message" "MESSAGETEXT" (use \n for linebreaks) - Displays message on screen. Can be put in any trigger block - but will only work in some. For example, Quake won't give an error if you put a "message" block in a monster's declaration, but you won't see the message, either (AFAIK). "wait" "#" // Waits # 10ths of a second. Can be put in any trigger block. 2.4 General Entity syntax: In order to complement the Unofficial Quake Specs, rather than confuse, we will follow what those authors have described as far as entities are concerned. Maybe this document will eventually be added into the UQS? John Wakelin (a partial author of UQS) says this about the entities in Quake: The entities define the monsters, things, but also the positions in space where something must happen. So they are the Quake equivalent of both the THINGS and the LINEDEF types from DOOM. The entity definitions are made up of a series of specific details that define what each is, where it starts, when it appears etc. Each specific is followed by a modifier that arguments it. All definitions have the classname specific that identifies that entity. The classname specifics relate intimately with the code lump and are the names of functions written in QuakeC. I have chosen the terms ``specific'' and ``arg'' for the two different parts of each detail of the definition. These terms may or may not suit but, they will have to do until we learn what id calls them. Line feeds (ASCII 0x0a) separate each definition and each line in the definition. Spaces (ASCII 0x20) separate specifics from args. I tried changing them around and it does not seem to matter what separates them as long as it is white space. I should add that you can also use C++ style comments in map files, as we do throughout the entity descriptions. Here are the known 'specifics' and 'args' in Quake shareware (mainly reproduced from the UQS): Specifics Args Description -------------------------------------------------------------------------------- "classname" "name" // Type of entity to be defined (mandatory) "origin" "X Y Z" // Coordinates of where it starts in space. "angle" "#" // Direction it faces or moves (sometimes in degrees) "light" "#" // Used with the light classname. "target" "t#" // Matches a targetname. "targetname" "t#" // Like a linedef tag. "wad" "wadfile" // The wad2 graphics file used by the world for textures. "spawnflags" "#" // Used to flag/describe an entity that is not default. {BRUSH INFO} // In entities that describe triggers/doors/platforms, etc, // the brush info is inserted into the entity brackets, // delimited by another set of brackets. "model" specifics/args: "speed" "#" // How fast the model is moved. "wait" "#" // How long a pause between completion of movement or // return to original position (in seconds or 10ths) "lip" "#" // Seems to be a means of adjusting the starting position. "style" "#" // Possibly similar to a spawnflag? "dmg" "#" // How much damage the model causes when it shuts on you? --------------------------------------------------------------------------------- { "specific1" "arg1" // The first descriptors (usually classname) "specific2" "arg2" // The second ... // Etc... { // for entities like doors/triggers/platforms/etc } } 2.5 All known entities: air_bubbles : Rising bubbles ambient_drip : Dripping sound ambient_drone : Engine/machinery sound ambient_comp_hum : Computer background sounds ambient_swamp1 : Frogs croaking ambient_swamp2 : Slightly different sounding frogs croaking event_lightning : Lightning (Used to kill Cthon, shareware boss) func_door : Door func_door_secret : A door that is triggered to open func_wall : A moving wall? func_button : A button func_train : A platform (moves along a "train") func_plat : A lift/elevator func_dm_only : A teleporter that only appears in deathmatch info_null : no idea info_intermission : Cameras positioning for intermission (?) info_player_start : Main player starting point (only one allowed) info_player_deathmatch : A deathmatch start (more than one allowed) info_player_coop : A coop player start (more than one allowed) info_player_start2 : ? Player2 start? info_teleport_destination : Gives coords for a teleport destination using a targetname item_cells : Ammo for the Thunderbolt item_rockets : Ammo for Rocket/Grenade Launcher item_shells : Ammo for both Shotgun and SuperShotgun item_spikes : Ammo for Perforator and Super Perforator item_health : Medkit item_artifact_envirosuit : Environmental Protection Suit item_artifact_super_damage : Quad Damage item_artifact_invulnerability : Pentagram of Protection item_artifact_invisibility : Ring of Shadows (Invisibility) item_armorInv : Red armor item_armor2 : Yellow armor item_armor1 : Green armor item_key1 : Silver Key item_key2 : Gold Key item_sigil : Sigil (a rune) light : A projected light. No visible lightsource. light_torch_small_walltorch : Small wall torch (gives off light) light_flame_large_yellow : Large yellow fire (does not give off light?) light_flame_small_yellow : Small yellow fire (does not give off light?) light_flame_small_white : Small white fire (does not give off light?) light_fluoro : Fluorescent light? (Gives off light) light_fluorospark : Fluorescent light? (Gives off light, makes sparking sound) monster_army : Grunt monster_dog : Attack dog monster_ogre : Ogre monster_knight : Knight monster_zombie : Zombie monster_wizard : Scragg (Wizard) monster_demon1 : Fiend (Demon) monster_shambler : Shambler monster_boss : Cthon (Boss of Shareware Quake) misc_fireball : Small fireball (gives off light, harms player) misc_explobox : Nuclear container (explodes upon being shot, harms player) path_corner : Used to define path of func_train platforms trap_spikeshooter : Shoots spikes (nails) trigger_teleport : Teleport (all trigger_ tags are triggered by walkover) trigger_changelevel : Changes to another level trigger_setskill : Changes skill level trigger_counter : trigger_once : Triggers action only once trigger_multiple : Triggers action (can be retriggered) trigger_onlyregistered : Triggers only if game is registered (registered == 1) trigger_secret : Triggers action and awards secret credit. trigger_monsterjump : Causes a targeted monster to jump [off something]? trigger_relay : weapon_supershotgun : SuperShotgun weapon_nailgun : Perforator weapon_supernailgun : Super Perforator weapon_grenadelauncher : Grenade Launcher weapon_rocketlauncher : Rocket Launcher weapon_lightning : Thunderbolt Cannon Section 3: Entity 'class' examples 3.1 Lights Regular Light: { "classname" "light" "origin" "X Y Z" // Tells where the light is. "light" "#" // Tells how bright the light is. (optional - default 200) } Light that must be switched on to give illumination: { "classname" "light" "origin" "X Y Z" "style" "32" // Tells Quake light must be switched on (?) "targetname" "t#" // Target i.d. of "switch" } Torches: { "classname" "light_torch_small_walltorch" "origin" "X Y Z" "light" "INTENSITY" "style" "#" // ??? 1,2 will work (optional) } Fire: { "classname" "light_flame_large_yellow, light_flame_small_yellow, light_flame_small_white" "origin" "X Y Z" } Fluorescent Light: { "classname" "light_fluoro" "origin" "X Y Z" "light" "#" } Fluorescent Light (makes sparking sound): { "classname" "light_fluorospark" "origin" "X Y Z" "light" "#" "style" "##" // ??? 10 will work } 3.2 Player Movement Entities Level Change Trigger (attaches to brush): { "classname" "trigger_changelevel" "map" "mapname" // Map to change to on trigger (e.g. e1m8) "spawnflags" "#" // Flags describing the object (optional) { } } Teleport Trigger (attaches to brush): { "classname" "trigger_teleport" "target" "t#" // Teleport destination name to teleport to. { { } Teleport Destination: { "classname" "info_teleport_destination" "origin" "X Y Z" "angle" "#" // angle the player will face upon leaving teleport "targetname" "t#" // Teleport's trigger name } 3.3 Movers Door (attaches to brush): { "classname" "func_door, func_door_secret" "angle" "#" - angle it faces "speed" "#" - speed of movement "targetname" "#" - Door's trigger name "sounds" "#" - sound it makes "wait" "#" - delay before closing "spawnflags "#" - Flags describing the object (optional) "lip" "#" - ??? (optional) { } } Possibly a special wall? (attaches to brush): { "spawnflags" "#" // flags for something (optional I'd guess) "classname" "func_wall" } A platform (i.e. lift or elevator, attaches to brush): { "classname" "func_plat" "height" "#" // height it rises? (optional) "sounds" "#" // sound it makes (optional) { } } Moving platform (Attaches to brush): { "classname" "func_train" "sounds" "#" // Sound it makes when activated "speed" "#" // Speed at which it moves (optional) "target" "t#" // Trigger name of its first path_corner destination "targetname" "t#" // Its trigger name { } } Describes path of train: { "classname" "path_corner" "origin" "X Y Z" "target" "t#" // Trigger name of next train destination. "targetname" "t#" // It's trigger name. { } } 3.4 Triggers/Switches A button/switch (attaches to brush): { "classname" "func_button" "angle" "#" // Angle button moves? "speed" "#" // Speed it moves in? "target" "t#" // Trigger name of target entity "sounds" "#" // Sound it makes when activated "wait" "#" // wait before action? Wait until retrigger? { } } Walk-over trigger (attaches to brush): { "classname" "trigger_once, trigger_multiple, trigger_onlyregistered, trigger_secret, trigger_monsterjump" "style" "32" // maybe other #s will work? "killtarget" "t#" // switch to "off" state perhaps? Only w/some triggers? (optional) "target" "t#" // Trigger name of target "sounds" "#" // Sound made when triggered { } } Sounds like an interesting trigger: { "classname" "trigger_relay" "origin" "X Y Z" // Where it is located "target" "t#" // Trigger name of its target } Another strange trigger tag (attaches to brush): { "classname" "trigger_counter" "targetname" "t#" // Its trigger name "target" "t#" // Trigger name of its target { } } 3.5 Traps/Things harmful to you: Nail-firing trap: { "classname" "trap_spikeshooter" "origin" "X Y Z" "angle" "#" // Angle the trap fires at "targetname" "t#" // Trap's trigger name "spawnflags" "#" // ??? 1024 works } Fireballs: { "classname" "misc_fireball" "origin" "X Y Z" "speed" "#" // Tells how fast the fireball moves } 3.6 Misc/Stuff I have no idea about: Cameras for the intermission screen: { "classname" "info_intermission" "origin" "X Y Z" // location of camera "mangle" "X Y Z" // location the camera looks at "angle" "#" // angle of the camera } Setting difficulty level (attaches to brush): { "classname" "trigger_setskill" "message" "#" // Skill level to change to. { } } Lightning used to kill the boss of shareware. I'll figure out how to use it later... I pretty much know how, I just want to test it before I put it here :). From the testing I've done, the lightning produced will not damage a player, however. It probably triggers a script to give the boss character damage. { "classname" "event_lightning" "origin" "X Y Z" // location of lightning (origin?) "targetname" "t#" // It's trigger name } 4.1 Moving Platforms: Creating a moving platform isn't that difficult. First, you must define the brush that will do the moving. Here's an example: { "classname" "func_train" "sounds" "1" "speed" "128" "target" "t1dest1" "targetname" "t1" { ( -768 0 0 ) ( -768 1 0 ) ( -768 0 1 ) GROUND1_6 0 0 0 1.0 1.0 ( -640 0 0 ) ( -640 0 1 ) ( -640 1 0 ) GROUND1_6 0 0 0 1.0 1.0 ( 0 -384 0 ) ( 0 -384 1 ) ( 1 -384 0 ) GROUND1_6 0 0 0 1.0 1.0 ( 0 -256 0 ) ( 1 -256 0 ) ( 0 -256 1 ) GROUND1_6 0 0 0 1.0 1.0 ( 0 0 -256 ) ( 1 0 -256 ) ( 0 1 -256 ) GROUND1_6 0 0 0 1.0 1.0 ( 0 0 -128 ) ( 0 1 -128 ) ( 1 0 -128 ) GROUND1_6 0 0 0 1.0 1.0 } } Now you define each of the path_corners it will travel to. When it reaches a path_corner, it will float to the next path_corner defined in the "trigger" tag of the path_corner. The platform will start at the path_corner pointed to by the platform's "trigger" tag. It will continue the loop indefinitely and it will go through walls to get to its destination. Here's its path_corners would look like: { "classname" "path_corner" "origin" "0 0 0" "targetname" "t1dest1" "target"" "t1dest2" } { "classname" "path_corner" "origin" "0 128 0" "targetname" "t1dest2" "target"" "t1dest1" } 4.2 Monsters and Triggers: Have you been wondering how you can get events to trigger when a monster dies, as first seen in E1M2 with the demons? Well, it's not too difficult. When you attach a trigger tag to a monster, the monster's death will trigger the event. I believe (not tested) that if other monsters have a triggername tag the same as a monster with the trigger tag, the trigger event will only occur when all monsters with a matching triggername tag are dead. The monster with the trigger tag need not have the triggername tag. Quake is Copyright 1996 id Software. Some information about entities was obtained from the Unofficial Quake Specs, a truly awesome reference guide to Quake editing (although a little outdated in some respects). Disclaimer: This document is provided as is and may not be perfect. I do not guarentee the validity of any of the information in it. I will not be held liable or responsible for any damages caused from use or misuse of the information contained within this document.